package com.xiyin.utils;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;

/**
 * @Author xukaihang
 * @Description //aes加解密工具类
 * @Date 2024/1/31 21:27
 * @Param
 * @return
 **/
public class AesUtil {

    private static final String ALGORITHM = "AES/ECB/PKCS5Padding";
    private static final String AES = "AES";
    private static final byte[] KEY = "1234567890abcdef".getBytes(); // 这里是AES密钥，注意需要16字节或24字节或32字节

    /**
     * AES加密方法
     * @param content 待加密内容
     * @return 加密后的字符串（Base64编码）
     * @throws Exception 加密过程中的异常
     */
    public static String encrypt(String content) throws Exception {
        Key key = generateKey(); // 生成密钥
        Cipher cipher = Cipher.getInstance(ALGORITHM); // 创建Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, key); // 初始化加密模式和密钥

        byte[] encryptedBytes = cipher.doFinal(content.getBytes("UTF-8")); // 加密待加密内容
        return Base64.getEncoder().encodeToString(encryptedBytes); // 返回加密后的字符串（Base64编码）
    }



    /**
     * AES解密方法
     * @param encryptedContent 待解密的字符串（Base64编码）
     * @return 解密后的字符串
     * @throws Exception 解密过程中的异常
     */
    public static String decrypt(String encryptedContent) throws Exception {
        Key key = generateKey(); // 生成密钥
        Cipher cipher = Cipher.getInstance(ALGORITHM); // 创建Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, key); // 初始化解密模式和密钥

        byte[] decodedBytes = Base64.getDecoder().decode(encryptedContent); // 解码待解密字符串
        byte[] decryptedBytes = cipher.doFinal(decodedBytes); // 解密待解密内容
        return new String(decryptedBytes, "UTF-8"); // 返回解密后的字符串
    }


    /**
     * 根据密钥生成AES密钥对象
     * @return AES密钥对象
     * @throws Exception 密钥生成过程中的异常
     */
    private static Key generateKey() throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(KEY, AES);
        System.out.println(4444);
        System.out.println(666666);
        System.out.println(66666);
        System.out.println("xukaihang1323111");
        System.out.println("xukaihang1323");
        System.out.println("333333333");
        return secretKeySpec;
    }

}
